package tree

import (
	"fmt"
)

type TreeNode struct{
	Value int
	Left, Right *TreeNode
}

func (node *TreeNode) /*前面的括号内称作接收者*/ Print()  {  //使用就是 root.print 传值参数
	fmt.Print(node.Value, " ")
}

//func Print(node *TreeNode)  {   //和上面的哪个函数式一样的   用法是print(root)
//	fmt.Print(node.Value, " ")
//}

func (node *TreeNode) SetValue(value int){ //和普通函数没有其他区别  就是调用方法不太一样，其他和普通函数没有区别
	if node == nil {
		fmt.Println("Setting value to nil node. Ignored.")
		return
	}
	//（*node）.value = value 结果和下面的一样，一般使用下面的写法
	node.Value = value
}

func CreateNode(value int) *TreeNode { //工厂函数  创建节点
	return &TreeNode{Value: value}
}


//type myTreeNode struct { //组合 treeNode
//	node *TreeNode
//}
//
//func (myNode *myTreeNode) postOrder() {  //组合
//	if myNode == nil || myNode.node == nil {
//		return
//	}
//	left := myTreeNode{myNode.node.left}
//	right := myTreeNode{myNode.node.right}
//	left.postOrder()
//	right.postOrder()
//	myNode.node.print()
//
//}
